import globals from 'globals';
import eslint from '@eslint/js';
import tsEslint from 'typescript-eslint';
import vueParser from 'vue-eslint-parser';
import vuePlugin from 'eslint-plugin-vue';

export default [
  // 基础配置
  eslint.configs.recommended,
  ...tsEslint.configs.recommended,
  {
    files: ['**/*.ts', '**/*.vue', '**/*.js'],
    languageOptions: {
      parser: vueParser,
      parserOptions: {
        parser: tsEslint.parser,
        extraFileExtensions: ['.vue'],
      },
    },
    plugins: { vue: vuePlugin },
    rules: {
      'vue/multi-word-component-names': 'off',
      'vue/html-self-closing': 'error',
      'no-console': 'error',
      semi: ['error', 'always'],
      '@typescript-eslint/no-unused-vars': 'error', // TS 未使用变量检测
      '@typescript-eslint/no-explicit-any': 'warn', // 禁止显式 any 类型
    },
  },
  // 全局规则
  {
    files: ['**/*.{js,ts}'],
    ignores: ['dist/**', 'node_modules'], // 显式声明忽略路径
    languageOptions: {
      globals: { ...globals.browser, ...globals.node },
    },
    rules: {
      'no-console': 'error',
      // process.env.NODE_ENV === 'production' ? 'error' : 'warn',
      semi: ['error', 'always'],
      quotes: ['error', 'single'], // TS 强制单引号
      '@typescript-eslint/ban-ts-comment': 'off', // 允许 @ts-ignore 注释
    },
  },

  {
    files: ['**/*.vue'],
    languageOptions: {
      parser: vueParser,
    },
    rules: {
      'vue/html-quotes': ['error', 'double'], // 模板属性强制双引号
      quotes: ['error', 'single'], // TS 强制单引号
      'vue/multi-word-component-names': 'off', // 允许单字组件名
    },
  },
  // 忽略目录配置
  {
    ignores: [
      'node_modules/',
      'dist/',
      '**/*.d.ts',
      '.eslintrc.*', // 排除自身配置文件
    ],
  },
];
